﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Data.Linq;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PF.MecSom {
    public partial class ServicosLista : UserControl {
        List<Db.Servico> servicos;
        List<Db.ServicoEquipamento> servicoEquipamentos;
        Db.Servico servico;
        Db.ServicoEquipamento servicoEquipamento;

        DateTime dataNula = new DateTime(2000, 1, 1);

        bool inserindo, editando;


        public ServicosPesquisa ucServicosPesquisa { get; set; }
        public Db.MecSom BancoDados { get; set; }


        public ServicosLista() {
            InitializeComponent();

            this.servicos = new List<Db.Servico>();
            this.servicoEquipamentos = new List<Db.ServicoEquipamento>();
        }


        #region Carregar dados

        public void CarregarServicos() {
            this.servicos.Clear();

            var servicos = from Db.Servico servico in BancoDados.Servico
                           orderby servico.Cliente
                           select servico;

            this.servicos.AddRange(servicos);

            dgvClientes.DataSource = from servico in servicos
                                     select new { servico.Cliente };

            CarregarCampos();
        }

        void CarregarCampos() {
            if (dgvClientes.SelectedRows.Count > 0)
                servico = servicos[dgvClientes.SelectedRows[0].Index];

            if (null != servico) {
                teCodServico.Text = servico.CodServico.ToString();
                deData.DateTime = servico.Data;
                teCliente.Text = servico.Cliente;
                teClienteTelefone1.Text = servico.ClienteTelefone1;
                teClienteTelefone2.Text = servico.ClienteTelefone2;
                teClienteTelefone3.Text = servico.ClienteTelefone3;
                teContato.Text = servico.Contato;
                teContatoTelefone1.Text = servico.ContatoTelefone1;
                teContatoTelefone2.Text = servico.ContatoTelefone2;
                teContatoTelefone3.Text = servico.ContatoTelefone3;

                CarregarAparelhos();
            }
        }


        public void CarregarAparelhos() {
            if (null != servico) {
                this.servicoEquipamentos.Clear();

                var servicoEquipamentos = from Db.ServicoEquipamento servicoEquipamento in BancoDados.ServicoEquipamento
                                          where servicoEquipamento.Servico.CodServico == servico.CodServico
                                          orderby servicoEquipamento.CodServicoEquipamento descending
                                          select servicoEquipamento;

                this.servicoEquipamentos.AddRange(servicoEquipamentos);

                dgvAparelhos.DataSource = from servicoEquipamento in servicoEquipamentos
                                          select new {
                                              servicoEquipamento.CodServicoEquipamento,
                                              servicoEquipamento.Tipo,
                                              servicoEquipamento.Marca,
                                              servicoEquipamento.Modelo,
                                              servicoEquipamento.Orcamento,
                                              servicoEquipamento.Situacao,
                                              servicoEquipamento.Pago,
                                              servicoEquipamento.Entregue
                                          };

                CarregarCamposAparelho();
            }
        }

        void CarregarCamposAparelho() {
            if (dgvAparelhos.SelectedRows.Count > 0)
                servicoEquipamento = servicoEquipamentos[dgvAparelhos.SelectedRows[0].Index];

            if (null != servicoEquipamento) {
                cbeSituacao.Text = servicoEquipamento.Situacao;
                deSituacaoOrcamento.DateTime = (servicoEquipamento.SituacaoOrcamento.HasValue ? servicoEquipamento.SituacaoOrcamento.Value : dataNula);
                deSituacaoCancelado.DateTime = (servicoEquipamento.SituacaoCancelado.HasValue ? servicoEquipamento.SituacaoCancelado.Value : dataNula);
                deSituacaoEsperandoPecas.DateTime = (servicoEquipamento.SituacaoEsperandoPecas.HasValue ? servicoEquipamento.SituacaoEsperandoPecas.Value : dataNula);
                deSituacaoAprovado.DateTime = (servicoEquipamento.SituacaoAprovado.HasValue ? servicoEquipamento.SituacaoAprovado.Value : dataNula);
                deSituacaoPronto.DateTime = (servicoEquipamento.SituacaoPronto.HasValue ? servicoEquipamento.SituacaoPronto.Value : dataNula);
                deSituacaoEntregue.DateTime = (servicoEquipamento.SituacaoEntregue.HasValue ? servicoEquipamento.SituacaoEntregue.Value : dataNula);
                chkPago.Checked = servicoEquipamento.Pago;
                teOrcamento.EditValue = servicoEquipamento.Orcamento;
                meDefeito.Text = servicoEquipamento.Defeito;
                meAcoes.Text = servicoEquipamento.Acoes;
                meObservacao.Text = servicoEquipamento.Observacao;
            }
        }

        #endregion


        #region Eventos

        private void dgvClientes_SelectionChanged(object sender, EventArgs e) {
            CarregarCampos();
        }

        private void dgvAparelhos_SelectionChanged(object sender, EventArgs e) {
            CarregarCamposAparelho();
        }

        #endregion


        #region Outros

        private void AtivarDesativar() {
            //
        }

        #endregion

    }
}
